status.go
author Mikael Berthe <mikael@lilotux.net>
Sat, 29 Apr 2017 17:27:15 +0200
changeset 156 70aadba26338
parent 155 0c581e0108da
child 159 408aa794d9bb
permissions -rw-r--r--
Add field "All" to LimitParams, change Limit behaviour If All is true, the library will send several requests (if needed) until the API server has sent all the results. If not, and if a Limit is set, the library will try to fetch at least this number of results.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
130
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     1
/*
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     2
Copyright 2017 Mikael Berthe
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     3
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     4
Licensed under the MIT license.  Please see the LICENSE file is this directory.
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     5
*/
c450bb73f59a Update credits
Mikael Berthe <mikael@lilotux.net>
parents: 120
diff changeset
     6
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
     7
package madon
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     8
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
     9
import (
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    10
	"fmt"
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    11
	"strconv"
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    12
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    13
	"github.com/sendgrid/rest"
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    14
)
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    15
108
3f21113728f4 Fix typo in comment
Mikael Berthe <mikael@lilotux.net>
parents: 106
diff changeset
    16
// updateStatusOptions contains option fields for POST and DELETE API calls
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    17
type updateStatusOptions struct {
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    18
	// The ID is used for most commands
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    19
	ID int
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    20
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    21
	// The following fields are used for posting a new status
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    22
	Status      string
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    23
	InReplyToID int
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    24
	MediaIDs    []int
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    25
	Sensitive   bool
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    26
	SpoilerText string
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    27
	Visibility  string // "direct", "private", "unlisted" or "public"
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    28
}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    29
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    30
// queryStatusData queries the statuses API
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    31
// The operation 'op' can be empty or "status" (the status itself), "context",
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    32
// "card", "reblogged_by", "favourited_by".
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    33
// The data argument will receive the object(s) returned by the API server.
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
    34
func (mc *Client) queryStatusData(statusID int, op string, data interface{}) error {
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    35
	if statusID < 1 {
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    36
		return ErrInvalidID
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    37
	}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    38
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    39
	endPoint := "statuses/" + strconv.Itoa(statusID)
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    40
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    41
	if op != "" && op != "status" {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    42
		switch op {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    43
		case "context", "card", "reblogged_by", "favourited_by":
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    44
		default:
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    45
			return ErrInvalidParameter
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    46
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    47
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    48
		endPoint += "/" + op
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    49
	}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    50
155
0c581e0108da Use links from headers
Mikael Berthe <mikael@lilotux.net>
parents: 149
diff changeset
    51
	return mc.apiCall(endPoint, rest.Get, nil, nil, nil, data)
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    52
}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
    53
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    54
// updateStatusData updates the statuses
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    55
// The operation 'op' can be empty or "status" (to post a status), "delete"
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    56
// (for deleting a status), "reblog", "unreblog", "favourite", "unfavourite".
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    57
// The data argument will receive the object(s) returned by the API server.
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
    58
func (mc *Client) updateStatusData(op string, opts updateStatusOptions, data interface{}) error {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    59
	method := rest.Post
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    60
	endPoint := "statuses"
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    61
	params := make(apiCallParams)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    62
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    63
	switch op {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    64
	case "", "status":
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    65
		op = "status"
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    66
		if opts.Status == "" {
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    67
			return ErrInvalidParameter
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    68
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    69
		switch opts.Visibility {
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    70
		case "", "direct", "private", "unlisted", "public":
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    71
			// Okay
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    72
		default:
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    73
			return ErrInvalidParameter
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    74
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    75
		if len(opts.MediaIDs) > 4 {
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    76
			return fmt.Errorf("too many (>4) media IDs")
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    77
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    78
	case "delete":
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    79
		method = rest.Delete
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    80
		if opts.ID < 1 {
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    81
			return ErrInvalidID
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    82
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    83
		endPoint += "/" + strconv.Itoa(opts.ID)
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    84
	case "reblog", "unreblog", "favourite", "unfavourite":
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    85
		if opts.ID < 1 {
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    86
			return ErrInvalidID
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    87
		}
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    88
		endPoint += "/" + strconv.Itoa(opts.ID) + "/" + op
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    89
	default:
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    90
		return ErrInvalidParameter
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    91
	}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    92
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    93
	// Form items for a new toot
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    94
	if op == "status" {
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    95
		params["status"] = opts.Status
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    96
		if opts.InReplyToID > 0 {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
    97
			params["in_reply_to_id"] = strconv.Itoa(opts.InReplyToID)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    98
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
    99
		for i, id := range opts.MediaIDs {
134
588edbc9e14b Add checks on ID list values
Mikael Berthe <mikael@lilotux.net>
parents: 132
diff changeset
   100
			if id < 1 {
588edbc9e14b Add checks on ID list values
Mikael Berthe <mikael@lilotux.net>
parents: 132
diff changeset
   101
				return ErrInvalidID
588edbc9e14b Add checks on ID list values
Mikael Berthe <mikael@lilotux.net>
parents: 132
diff changeset
   102
			}
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   103
			qID := fmt.Sprintf("media_ids[%d]", i+1)
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   104
			params[qID] = strconv.Itoa(id)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   105
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   106
		if opts.Sensitive {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   107
			params["sensitive"] = "true"
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   108
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   109
		if opts.SpoilerText != "" {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   110
			params["spoiler_text"] = opts.SpoilerText
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   111
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   112
		if opts.Visibility != "" {
120
579912e9d0ef Refactor API calls
Mikael Berthe <mikael@lilotux.net>
parents: 110
diff changeset
   113
			params["visibility"] = opts.Visibility
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   114
		}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   115
	}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   116
155
0c581e0108da Use links from headers
Mikael Berthe <mikael@lilotux.net>
parents: 149
diff changeset
   117
	return mc.apiCall(endPoint, method, params, nil, nil, data)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   118
}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   119
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   120
// GetStatus returns a status
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   121
// The returned status can be nil if there is an error or if the
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   122
// requested ID does not exist.
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   123
func (mc *Client) GetStatus(statusID int) (*Status, error) {
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   124
	var status Status
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   125
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   126
	if err := mc.queryStatusData(statusID, "status", &status); err != nil {
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   127
		return nil, err
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   128
	}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   129
	if status.ID == 0 {
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   130
		return nil, ErrEntityNotFound
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   131
	}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   132
	return &status, nil
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   133
}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   134
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   135
// GetStatusContext returns a status context
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   136
func (mc *Client) GetStatusContext(statusID int) (*Context, error) {
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   137
	var context Context
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   138
	if err := mc.queryStatusData(statusID, "context", &context); err != nil {
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   139
		return nil, err
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   140
	}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   141
	return &context, nil
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   142
}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   143
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   144
// GetStatusCard returns a status card
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   145
func (mc *Client) GetStatusCard(statusID int) (*Card, error) {
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   146
	var card Card
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   147
	if err := mc.queryStatusData(statusID, "card", &card); err != nil {
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   148
		return nil, err
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   149
	}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   150
	return &card, nil
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   151
}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   152
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   153
// GetStatusRebloggedBy returns a list of the accounts who reblogged a status
149
5f922977d7c7 Add support for limits and paging ({since,max}_id) API parameters
Mikael Berthe <mikael@lilotux.net>
parents: 138
diff changeset
   154
func (mc *Client) GetStatusRebloggedBy(statusID int, lopt *LimitParams) ([]Account, error) {
155
0c581e0108da Use links from headers
Mikael Berthe <mikael@lilotux.net>
parents: 149
diff changeset
   155
	o := &getAccountsOptions{ID: statusID, Limit: lopt}
0c581e0108da Use links from headers
Mikael Berthe <mikael@lilotux.net>
parents: 149
diff changeset
   156
	return mc.getMultipleAccounts("reblogged_by", o)
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   157
}
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   158
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   159
// GetStatusFavouritedBy returns a list of the accounts who favourited a status
149
5f922977d7c7 Add support for limits and paging ({since,max}_id) API parameters
Mikael Berthe <mikael@lilotux.net>
parents: 138
diff changeset
   160
func (mc *Client) GetStatusFavouritedBy(statusID int, lopt *LimitParams) ([]Account, error) {
155
0c581e0108da Use links from headers
Mikael Berthe <mikael@lilotux.net>
parents: 149
diff changeset
   161
	o := &getAccountsOptions{ID: statusID, Limit: lopt}
0c581e0108da Use links from headers
Mikael Berthe <mikael@lilotux.net>
parents: 149
diff changeset
   162
	return mc.getMultipleAccounts("favourited_by", o)
103
9860bb68a0a6 Add status (GET) methods
Mikael Berthe <mikael@lilotux.net>
parents: 8
diff changeset
   163
}
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   164
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   165
// PostStatus posts a new "toot"
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   166
// All parameters but "text" can be empty.
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   167
// Visibility must be empty, or one of "direct", "private", "unlisted" and "public".
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   168
func (mc *Client) PostStatus(text string, inReplyTo int, mediaIDs []int, sensitive bool, spoilerText string, visibility string) (*Status, error) {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   169
	var status Status
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   170
	o := updateStatusOptions{
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   171
		Status:      text,
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   172
		InReplyToID: inReplyTo,
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   173
		MediaIDs:    mediaIDs,
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   174
		Sensitive:   sensitive,
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   175
		SpoilerText: spoilerText,
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   176
		Visibility:  visibility,
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   177
	}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   178
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   179
	err := mc.updateStatusData("status", o, &status)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   180
	if err != nil {
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   181
		return nil, err
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   182
	}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   183
	if status.ID == 0 {
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   184
		return nil, ErrEntityNotFound // TODO Change error message
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   185
	}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   186
	return &status, err
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   187
}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   188
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   189
// DeleteStatus deletes a status
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   190
func (mc *Client) DeleteStatus(statusID int) error {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   191
	var status Status
132
639bbcddb4fe Make identifiers less ambiguous
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
   192
	o := updateStatusOptions{ID: statusID}
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   193
	err := mc.updateStatusData("delete", o, &status)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   194
	return err
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   195
}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   196
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   197
// ReblogStatus reblogs a status
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   198
func (mc *Client) ReblogStatus(statusID int) error {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   199
	var status Status
132
639bbcddb4fe Make identifiers less ambiguous
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
   200
	o := updateStatusOptions{ID: statusID}
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   201
	err := mc.updateStatusData("reblog", o, &status)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   202
	return err
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   203
}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   204
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   205
// UnreblogStatus unreblogs a status
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   206
func (mc *Client) UnreblogStatus(statusID int) error {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   207
	var status Status
132
639bbcddb4fe Make identifiers less ambiguous
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
   208
	o := updateStatusOptions{ID: statusID}
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   209
	err := mc.updateStatusData("unreblog", o, &status)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   210
	return err
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   211
}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   212
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   213
// FavouriteStatus favourites a status
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   214
func (mc *Client) FavouriteStatus(statusID int) error {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   215
	var status Status
132
639bbcddb4fe Make identifiers less ambiguous
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
   216
	o := updateStatusOptions{ID: statusID}
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   217
	err := mc.updateStatusData("favourite", o, &status)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   218
	return err
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   219
}
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   220
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   221
// UnfavouriteStatus unfavourites a status
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   222
func (mc *Client) UnfavouriteStatus(statusID int) error {
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   223
	var status Status
132
639bbcddb4fe Make identifiers less ambiguous
Mikael Berthe <mikael@lilotux.net>
parents: 130
diff changeset
   224
	o := updateStatusOptions{ID: statusID}
138
23d3a518d0ad Update package name in source files
Mikael Berthe <mikael@lilotux.net>
parents: 134
diff changeset
   225
	err := mc.updateStatusData("unfavourite", o, &status)
105
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   226
	return err
e2a16e19eb8b Add missing status commands
Mikael Berthe <mikael@lilotux.net>
parents: 103
diff changeset
   227
}