checkpoint: add ability to mute and unmute statuses

This commit is contained in:
Dan Anglin 2024-08-15 19:58:19 +01:00
parent 42f54c6020
commit 57973f63d1
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
6 changed files with 81 additions and 2 deletions

View file

@ -241,7 +241,7 @@ func (g *Client) ReblogStatus(statusID string) error {
if err := g.sendRequest(params); err != nil { if err := g.sendRequest(params); err != nil {
return fmt.Errorf( return fmt.Errorf(
"received an error after sending the request to reblog the status; %w", "received an error after sending the request to reblog the status: %w",
err, err,
) )
} }
@ -262,7 +262,49 @@ func (g *Client) UnreblogStatus(statusID string) error {
if err := g.sendRequest(params); err != nil { if err := g.sendRequest(params); err != nil {
return fmt.Errorf( return fmt.Errorf(
"received an error after sending the request to un-reblog the status; %w", "received an error after sending the request to un-reblog the status: %w",
err,
)
}
return nil
}
func (g *Client) MuteStatus(statusID string) error {
url := g.Authentication.Instance + baseStatusesPath + "/" + statusID + "/mute"
params := requestParameters{
httpMethod: http.MethodPost,
url: url,
requestBody: nil,
contentType: "",
output: nil,
}
if err := g.sendRequest(params); err != nil {
return fmt.Errorf(
"received an error after sending the request to mute the status: %w",
err,
)
}
return nil
}
func (g *Client) UnmuteStatus(statusID string) error {
url := g.Authentication.Instance + baseStatusesPath + "/" + statusID + "/unmute"
params := requestParameters{
httpMethod: http.MethodPost,
url: url,
requestBody: nil,
contentType: "",
output: nil,
}
if err := g.sendRequest(params); err != nil {
return fmt.Errorf(
"received an error after sending the request to unmute the status: %w",
err, err,
) )
} }

View file

@ -347,6 +347,7 @@ type MuteExecutor struct {
accountName internalFlag.StringSliceValue accountName internalFlag.StringSliceValue
muteDuration internalFlag.TimeDurationValue muteDuration internalFlag.TimeDurationValue
muteNotifications bool muteNotifications bool
statusID string
resourceType string resourceType string
} }
@ -367,6 +368,7 @@ func NewMuteExecutor(
exe.Var(&exe.accountName, "account-name", "The name of the account") exe.Var(&exe.accountName, "account-name", "The name of the account")
exe.Var(&exe.muteDuration, "mute-duration", "Specify how long the mute should last for. To mute indefinitely, set this to 0s") exe.Var(&exe.muteDuration, "mute-duration", "Specify how long the mute should last for. To mute indefinitely, set this to 0s")
exe.BoolVar(&exe.muteNotifications, "mute-notifications", false, "Set to true to mute notifications as well as posts") exe.BoolVar(&exe.muteNotifications, "mute-notifications", false, "Set to true to mute notifications as well as posts")
exe.StringVar(&exe.statusID, "status-id", "", "The ID of the status")
exe.StringVar(&exe.resourceType, "type", "", "The type of resource you want to action on (e.g. account, status)") exe.StringVar(&exe.resourceType, "type", "", "The type of resource you want to action on (e.g. account, status)")
return &exe return &exe
@ -591,6 +593,7 @@ type UnmuteExecutor struct {
printer *printer.Printer printer *printer.Printer
config *config.Config config *config.Config
accountName internalFlag.StringSliceValue accountName internalFlag.StringSliceValue
statusID string
resourceType string resourceType string
} }
@ -608,6 +611,7 @@ func NewUnmuteExecutor(
exe.Usage = usage.ExecutorUsageFunc("unmute", "Umutes a specific resource (e.g. an account)", exe.FlagSet) exe.Usage = usage.ExecutorUsageFunc("unmute", "Umutes a specific resource (e.g. an account)", exe.FlagSet)
exe.Var(&exe.accountName, "account-name", "The name of the account") exe.Var(&exe.accountName, "account-name", "The name of the account")
exe.StringVar(&exe.statusID, "status-id", "", "The ID of the status")
exe.StringVar(&exe.resourceType, "type", "", "The type of resource you want to action on (e.g. account, status)") exe.StringVar(&exe.resourceType, "type", "", "The type of resource you want to action on (e.g. account, status)")
return &exe return &exe

View file

@ -9,6 +9,7 @@ import (
func (m *MuteExecutor) Execute() error { func (m *MuteExecutor) Execute() error {
funcMap := map[string]func(*client.Client) error{ funcMap := map[string]func(*client.Client) error{
resourceAccount: m.muteAccount, resourceAccount: m.muteAccount,
resourceStatus: m.muteStatus,
} }
doFunc, ok := funcMap[m.resourceType] doFunc, ok := funcMap[m.resourceType]
@ -43,3 +44,17 @@ func (m *MuteExecutor) muteAccount(gtsClient *client.Client) error {
return nil return nil
} }
func (m *MuteExecutor) muteStatus(gtsClient *client.Client) error {
if m.statusID == "" {
return FlagNotSetError{flagText: flagStatusID}
}
if err := gtsClient.MuteStatus(m.statusID); err != nil {
return fmt.Errorf("unable to mute the status: %w", err)
}
m.printer.PrintSuccess("Successfully muted the status.")
return nil
}

View file

@ -9,6 +9,7 @@ import (
func (m *UnmuteExecutor) Execute() error { func (m *UnmuteExecutor) Execute() error {
funcMap := map[string]func(*client.Client) error{ funcMap := map[string]func(*client.Client) error{
resourceAccount: m.unmuteAccount, resourceAccount: m.unmuteAccount,
resourceStatus: m.unmuteStatus,
} }
doFunc, ok := funcMap[m.resourceType] doFunc, ok := funcMap[m.resourceType]
@ -38,3 +39,17 @@ func (m *UnmuteExecutor) unmuteAccount(gtsClient *client.Client) error {
return nil return nil
} }
func (m *UnmuteExecutor) unmuteStatus(gtsClient *client.Client) error {
if m.statusID == "" {
return FlagNotSetError{flagText: flagStatusID}
}
if err := gtsClient.UnmuteStatus(m.statusID); err != nil {
return fmt.Errorf("unable to unmute the status: %w", err)
}
m.printer.PrintSuccess("Successfully unmuted the status.")
return nil
}

View file

@ -66,6 +66,7 @@ func (p Printer) PrintStatus(status model.Status, userAccountID string) {
builder.WriteString("\n" + p.fieldFormat("Boosted: ") + strconv.FormatBool(status.Reblogged)) builder.WriteString("\n" + p.fieldFormat("Boosted: ") + strconv.FormatBool(status.Reblogged))
builder.WriteString("\n" + p.fieldFormat("Liked: ") + strconv.FormatBool(status.Favourited)) builder.WriteString("\n" + p.fieldFormat("Liked: ") + strconv.FormatBool(status.Favourited))
builder.WriteString("\n" + p.fieldFormat("Bookmarked: ") + strconv.FormatBool(status.Bookmarked)) builder.WriteString("\n" + p.fieldFormat("Bookmarked: ") + strconv.FormatBool(status.Bookmarked))
builder.WriteString("\n" + p.fieldFormat("Muted: ") + strconv.FormatBool(status.Muted))
// Status visibility // Status visibility
builder.WriteString("\n\n" + p.headerFormat("VISIBILITY:")) builder.WriteString("\n\n" + p.headerFormat("VISIBILITY:"))

View file

@ -335,6 +335,7 @@
{ "flag": "account-name" }, { "flag": "account-name" },
{ "flag": "mute-duration" }, { "flag": "mute-duration" },
{ "flag": "mute-notifications", "default": "false" }, { "flag": "mute-notifications", "default": "false" },
{ "flag": "status-id", "fieldName": "statusID", "default": "" },
{ "flag": "type", "fieldName": "resourceType", "default": "" } { "flag": "type", "fieldName": "resourceType", "default": "" }
], ],
"summary": "Mutes a specific resource (e.g. an account)", "summary": "Mutes a specific resource (e.g. an account)",
@ -427,6 +428,7 @@
"additionalFields": [], "additionalFields": [],
"flags": [ "flags": [
{ "flag": "account-name" }, { "flag": "account-name" },
{ "flag": "status-id", "fieldName": "statusID", "default": "" },
{ "flag": "type", "fieldName": "resourceType", "default": "" } { "flag": "type", "fieldName": "resourceType", "default": "" }
], ],
"summary": "Umutes a specific resource (e.g. an account)", "summary": "Umutes a specific resource (e.g. an account)",