feat: add reblogging (boosting) support

Add support for reblogging (boosting) a status by adding a boost to said
status.
This commit is contained in:
Dan Anglin 2024-06-04 18:38:47 +01:00
parent c8187587a8
commit 9c8476fa97
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
4 changed files with 61 additions and 12 deletions

View file

@ -153,3 +153,29 @@ func (g *Client) GetLikedStatuses(limit int, resourceName string) (model.StatusL
return liked, nil
}
func (g *Client) ReblogStatus(statusID string) error {
url := g.Authentication.Instance + "/api/v1/statuses/" + statusID + "/reblog"
if err := g.sendRequest(http.MethodPost, url, nil, nil); err != nil {
return fmt.Errorf(
"received an error after sending the request to reblog the status; %w",
err,
)
}
return nil
}
func (g *Client) UnreblogStatus(statusID string) error {
url := g.Authentication.Instance + "/api/v1/statuses/" + statusID + "/unreblog"
if err := g.sendRequest(http.MethodPost, url, nil, nil); err != nil {
return fmt.Errorf(
"received an error after sending the request to un-reblog the status; %w",
err,
)
}
return nil
}

View file

@ -187,9 +187,14 @@ func (a *AddExecutor) addStatusToBookmarks(gtsClient *client.Client) error {
}
func (a *AddExecutor) addToStatus(gtsClient *client.Client) error {
if a.statusID == "" {
return FlagNotSetError{flagText: flagStatusID}
}
funcMap := map[string]func(*client.Client) error{
resourceStar: a.addStarToStatus,
resourceLike: a.addStarToStatus,
resourceStar: a.addStarToStatus,
resourceLike: a.addStarToStatus,
resourceBoost: a.addBoostToStatus,
}
doFunc, ok := funcMap[a.resourceType]
@ -204,10 +209,6 @@ func (a *AddExecutor) addToStatus(gtsClient *client.Client) error {
}
func (a *AddExecutor) addStarToStatus(gtsClient *client.Client) error {
if a.statusID == "" {
return FlagNotSetError{flagText: flagStatusID}
}
if err := gtsClient.LikeStatus(a.statusID); err != nil {
return fmt.Errorf("unable to add the %s to the status: %w", a.resourceType, err)
}
@ -216,3 +217,13 @@ func (a *AddExecutor) addStarToStatus(gtsClient *client.Client) error {
return nil
}
func (a *AddExecutor) addBoostToStatus(gtsClient *client.Client) error {
if err := gtsClient.ReblogStatus(a.statusID); err != nil {
return fmt.Errorf("unable to add the boost to the status: %w", err)
}
fmt.Println("Successfully added the boost to the status.")
return nil
}

View file

@ -38,6 +38,7 @@ const (
resourceAccount = "account"
resourceBlocked = "blocked"
resourceBookmarks = "bookmarks"
resourceBoost = "boost"
resourceFollowers = "followers"
resourceFollowing = "following"
resourceInstance = "instance"

View file

@ -178,9 +178,14 @@ func (r *RemoveExecutor) removeStatusFromBookmarks(gtsClient *client.Client) err
}
func (r *RemoveExecutor) removeFromStatus(gtsClient *client.Client) error {
if r.statusID == "" {
return FlagNotSetError{flagText: flagStatusID}
}
funcMap := map[string]func(*client.Client) error{
resourceStar: r.removeStarFromStatus,
resourceLike: r.removeStarFromStatus,
resourceStar: r.removeStarFromStatus,
resourceLike: r.removeStarFromStatus,
resourceBoost: r.removeBoostFromStatus,
}
doFunc, ok := funcMap[r.resourceType]
@ -195,10 +200,6 @@ func (r *RemoveExecutor) removeFromStatus(gtsClient *client.Client) error {
}
func (r *RemoveExecutor) removeStarFromStatus(gtsClient *client.Client) error {
if r.statusID == "" {
return FlagNotSetError{flagText: flagStatusID}
}
if err := gtsClient.UnlikeStatus(r.statusID); err != nil {
return fmt.Errorf("unable to remove the %s from the status: %w", r.resourceType, err)
}
@ -207,3 +208,13 @@ func (r *RemoveExecutor) removeStarFromStatus(gtsClient *client.Client) error {
return nil
}
func (r *RemoveExecutor) removeBoostFromStatus(gtsClient *client.Client) error {
if err := gtsClient.UnreblogStatus(r.statusID); err != nil {
return fmt.Errorf("unable to remove the boost from the status: %w", err)
}
fmt.Println("Successfully removed the boost from the status.")
return nil
}