status.go
changeset 159 408aa794d9bb
parent 155 0c581e0108da
child 160 9f7e683b323f
equal deleted inserted replaced
158:083d33bb419b 159:408aa794d9bb
    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 }