14 ) |
14 ) |
15 |
15 |
16 // updateStatusOptions contains option fields for POST and DELETE API calls |
16 // updateStatusOptions contains option fields for POST and DELETE API calls |
17 type updateStatusOptions struct { |
17 type updateStatusOptions struct { |
18 // The ID is used for most commands |
18 // The ID is used for most commands |
19 ID int |
19 ID int64 |
20 |
20 |
21 // The following fields are used for posting a new status |
21 // The following fields are used for posting a new status |
22 Status string |
22 Status string |
23 InReplyToID int |
23 InReplyToID int64 |
24 MediaIDs []int |
24 MediaIDs []int64 |
25 Sensitive bool |
25 Sensitive bool |
26 SpoilerText string |
26 SpoilerText string |
27 Visibility string // "direct", "private", "unlisted" or "public" |
27 Visibility string // "direct", "private", "unlisted" or "public" |
28 } |
28 } |
29 |
29 |
30 // queryStatusData queries the statuses API |
30 // queryStatusData queries the statuses API |
31 // The operation 'op' can be empty or "status" (the status itself), "context", |
31 // The operation 'op' can be empty or "status" (the status itself), "context", |
32 // "card", "reblogged_by", "favourited_by". |
32 // "card", "reblogged_by", "favourited_by". |
33 // The data argument will receive the object(s) returned by the API server. |
33 // The data argument will receive the object(s) returned by the API server. |
34 func (mc *Client) queryStatusData(statusID int, op string, data interface{}) error { |
34 func (mc *Client) queryStatusData(statusID int64, op string, data interface{}) error { |
35 if statusID < 1 { |
35 if statusID < 1 { |
36 return ErrInvalidID |
36 return ErrInvalidID |
37 } |
37 } |
38 |
38 |
39 endPoint := "statuses/" + strconv.Itoa(statusID) |
39 endPoint := "statuses/" + strconv.FormatInt(statusID, 10) |
40 |
40 |
41 if op != "" && op != "status" { |
41 if op != "" && op != "status" { |
42 switch op { |
42 switch op { |
43 case "context", "card", "reblogged_by", "favourited_by": |
43 case "context", "card", "reblogged_by", "favourited_by": |
44 default: |
44 default: |
78 case "delete": |
78 case "delete": |
79 method = rest.Delete |
79 method = rest.Delete |
80 if opts.ID < 1 { |
80 if opts.ID < 1 { |
81 return ErrInvalidID |
81 return ErrInvalidID |
82 } |
82 } |
83 endPoint += "/" + strconv.Itoa(opts.ID) |
83 endPoint += "/" + strconv.FormatInt(opts.ID, 10) |
84 case "reblog", "unreblog", "favourite", "unfavourite": |
84 case "reblog", "unreblog", "favourite", "unfavourite": |
85 if opts.ID < 1 { |
85 if opts.ID < 1 { |
86 return ErrInvalidID |
86 return ErrInvalidID |
87 } |
87 } |
88 endPoint += "/" + strconv.Itoa(opts.ID) + "/" + op |
88 endPoint += "/" + strconv.FormatInt(opts.ID, 10) + "/" + op |
89 default: |
89 default: |
90 return ErrInvalidParameter |
90 return ErrInvalidParameter |
91 } |
91 } |
92 |
92 |
93 // Form items for a new toot |
93 // Form items for a new toot |
94 if op == "status" { |
94 if op == "status" { |
95 params["status"] = opts.Status |
95 params["status"] = opts.Status |
96 if opts.InReplyToID > 0 { |
96 if opts.InReplyToID > 0 { |
97 params["in_reply_to_id"] = strconv.Itoa(opts.InReplyToID) |
97 params["in_reply_to_id"] = strconv.FormatInt(opts.InReplyToID, 10) |
98 } |
98 } |
99 for i, id := range opts.MediaIDs { |
99 for i, id := range opts.MediaIDs { |
100 if id < 1 { |
100 if id < 1 { |
101 return ErrInvalidID |
101 return ErrInvalidID |
102 } |
102 } |
103 qID := fmt.Sprintf("media_ids[%d]", i+1) |
103 qID := fmt.Sprintf("media_ids[%d]", i+1) |
104 params[qID] = strconv.Itoa(id) |
104 params[qID] = strconv.FormatInt(id, 10) |
105 } |
105 } |
106 if opts.Sensitive { |
106 if opts.Sensitive { |
107 params["sensitive"] = "true" |
107 params["sensitive"] = "true" |
108 } |
108 } |
109 if opts.SpoilerText != "" { |
109 if opts.SpoilerText != "" { |
118 } |
118 } |
119 |
119 |
120 // GetStatus returns a status |
120 // GetStatus returns a status |
121 // The returned status can be nil if there is an error or if the |
121 // The returned status can be nil if there is an error or if the |
122 // requested ID does not exist. |
122 // requested ID does not exist. |
123 func (mc *Client) GetStatus(statusID int) (*Status, error) { |
123 func (mc *Client) GetStatus(statusID int64) (*Status, error) { |
124 var status Status |
124 var status Status |
125 |
125 |
126 if err := mc.queryStatusData(statusID, "status", &status); err != nil { |
126 if err := mc.queryStatusData(statusID, "status", &status); err != nil { |
127 return nil, err |
127 return nil, err |
128 } |
128 } |
131 } |
131 } |
132 return &status, nil |
132 return &status, nil |
133 } |
133 } |
134 |
134 |
135 // GetStatusContext returns a status context |
135 // GetStatusContext returns a status context |
136 func (mc *Client) GetStatusContext(statusID int) (*Context, error) { |
136 func (mc *Client) GetStatusContext(statusID int64) (*Context, error) { |
137 var context Context |
137 var context Context |
138 if err := mc.queryStatusData(statusID, "context", &context); err != nil { |
138 if err := mc.queryStatusData(statusID, "context", &context); err != nil { |
139 return nil, err |
139 return nil, err |
140 } |
140 } |
141 return &context, nil |
141 return &context, nil |
142 } |
142 } |
143 |
143 |
144 // GetStatusCard returns a status card |
144 // GetStatusCard returns a status card |
145 func (mc *Client) GetStatusCard(statusID int) (*Card, error) { |
145 func (mc *Client) GetStatusCard(statusID int64) (*Card, error) { |
146 var card Card |
146 var card Card |
147 if err := mc.queryStatusData(statusID, "card", &card); err != nil { |
147 if err := mc.queryStatusData(statusID, "card", &card); err != nil { |
148 return nil, err |
148 return nil, err |
149 } |
149 } |
150 return &card, nil |
150 return &card, nil |
151 } |
151 } |
152 |
152 |
153 // GetStatusRebloggedBy returns a list of the accounts who reblogged a status |
153 // GetStatusRebloggedBy returns a list of the accounts who reblogged a status |
154 func (mc *Client) GetStatusRebloggedBy(statusID int, lopt *LimitParams) ([]Account, error) { |
154 func (mc *Client) GetStatusRebloggedBy(statusID int64, lopt *LimitParams) ([]Account, error) { |
155 o := &getAccountsOptions{ID: statusID, Limit: lopt} |
155 o := &getAccountsOptions{ID: statusID, Limit: lopt} |
156 return mc.getMultipleAccounts("reblogged_by", o) |
156 return mc.getMultipleAccounts("reblogged_by", o) |
157 } |
157 } |
158 |
158 |
159 // GetStatusFavouritedBy returns a list of the accounts who favourited a status |
159 // GetStatusFavouritedBy returns a list of the accounts who favourited a status |
160 func (mc *Client) GetStatusFavouritedBy(statusID int, lopt *LimitParams) ([]Account, error) { |
160 func (mc *Client) GetStatusFavouritedBy(statusID int64, lopt *LimitParams) ([]Account, error) { |
161 o := &getAccountsOptions{ID: statusID, Limit: lopt} |
161 o := &getAccountsOptions{ID: statusID, Limit: lopt} |
162 return mc.getMultipleAccounts("favourited_by", o) |
162 return mc.getMultipleAccounts("favourited_by", o) |
163 } |
163 } |
164 |
164 |
165 // PostStatus posts a new "toot" |
165 // PostStatus posts a new "toot" |
166 // All parameters but "text" can be empty. |
166 // All parameters but "text" can be empty. |
167 // Visibility must be empty, or one of "direct", "private", "unlisted" and "public". |
167 // Visibility must be empty, or one of "direct", "private", "unlisted" and "public". |
168 func (mc *Client) PostStatus(text string, inReplyTo int, mediaIDs []int, sensitive bool, spoilerText string, visibility string) (*Status, error) { |
168 func (mc *Client) PostStatus(text string, inReplyTo int64, mediaIDs []int64, sensitive bool, spoilerText string, visibility string) (*Status, error) { |
169 var status Status |
169 var status Status |
170 o := updateStatusOptions{ |
170 o := updateStatusOptions{ |
171 Status: text, |
171 Status: text, |
172 InReplyToID: inReplyTo, |
172 InReplyToID: inReplyTo, |
173 MediaIDs: mediaIDs, |
173 MediaIDs: mediaIDs, |
185 } |
185 } |
186 return &status, err |
186 return &status, err |
187 } |
187 } |
188 |
188 |
189 // DeleteStatus deletes a status |
189 // DeleteStatus deletes a status |
190 func (mc *Client) DeleteStatus(statusID int) error { |
190 func (mc *Client) DeleteStatus(statusID int64) error { |
191 var status Status |
191 var status Status |
192 o := updateStatusOptions{ID: statusID} |
192 o := updateStatusOptions{ID: statusID} |
193 err := mc.updateStatusData("delete", o, &status) |
193 err := mc.updateStatusData("delete", o, &status) |
194 return err |
194 return err |
195 } |
195 } |
196 |
196 |
197 // ReblogStatus reblogs a status |
197 // ReblogStatus reblogs a status |
198 func (mc *Client) ReblogStatus(statusID int) error { |
198 func (mc *Client) ReblogStatus(statusID int64) error { |
199 var status Status |
199 var status Status |
200 o := updateStatusOptions{ID: statusID} |
200 o := updateStatusOptions{ID: statusID} |
201 err := mc.updateStatusData("reblog", o, &status) |
201 err := mc.updateStatusData("reblog", o, &status) |
202 return err |
202 return err |
203 } |
203 } |
204 |
204 |
205 // UnreblogStatus unreblogs a status |
205 // UnreblogStatus unreblogs a status |
206 func (mc *Client) UnreblogStatus(statusID int) error { |
206 func (mc *Client) UnreblogStatus(statusID int64) error { |
207 var status Status |
207 var status Status |
208 o := updateStatusOptions{ID: statusID} |
208 o := updateStatusOptions{ID: statusID} |
209 err := mc.updateStatusData("unreblog", o, &status) |
209 err := mc.updateStatusData("unreblog", o, &status) |
210 return err |
210 return err |
211 } |
211 } |
212 |
212 |
213 // FavouriteStatus favourites a status |
213 // FavouriteStatus favourites a status |
214 func (mc *Client) FavouriteStatus(statusID int) error { |
214 func (mc *Client) FavouriteStatus(statusID int64) error { |
215 var status Status |
215 var status Status |
216 o := updateStatusOptions{ID: statusID} |
216 o := updateStatusOptions{ID: statusID} |
217 err := mc.updateStatusData("favourite", o, &status) |
217 err := mc.updateStatusData("favourite", o, &status) |
218 return err |
218 return err |
219 } |
219 } |
220 |
220 |
221 // UnfavouriteStatus unfavourites a status |
221 // UnfavouriteStatus unfavourites a status |
222 func (mc *Client) UnfavouriteStatus(statusID int) error { |
222 func (mc *Client) UnfavouriteStatus(statusID int64) error { |
223 var status Status |
223 var status Status |
224 o := updateStatusOptions{ID: statusID} |
224 o := updateStatusOptions{ID: statusID} |
225 err := mc.updateStatusData("unfavourite", o, &status) |
225 err := mc.updateStatusData("unfavourite", o, &status) |
226 return err |
226 return err |
227 } |
227 } |