refactor: clean up errors

- Created generic Error types to remove the need to import the errors
  package.
- Used the generic Error types in place of the single use custom Error
  types that have no fields.
- Created new Error types where necessary.
This commit is contained in:
Dan Anglin 2024-08-17 11:23:21 +01:00
parent f223e0417c
commit 4d86ead737
Signed by: dananglin
GPG key ID: 0C1D44CFBEE68638
16 changed files with 174 additions and 139 deletions

View file

@ -79,10 +79,9 @@ func (g *Client) DownloadMedia(url, path string) error {
defer response.Body.Close() defer response.Body.Close()
if response.StatusCode != http.StatusOK { if response.StatusCode != http.StatusOK {
return fmt.Errorf( return BadStatusCodeError{
"did not receive an OK response from the GoToSocial server: got %d", statusCode: response.StatusCode,
response.StatusCode, }
)
} }
file, err := os.Create(path) file, err := os.Create(path)

View file

@ -30,3 +30,22 @@ func (e ResponseError) Error() string {
e.Message, e.Message,
) )
} }
type BadStatusCodeError struct {
statusCode int
}
func (e BadStatusCodeError) Error() string {
return fmt.Sprintf(
"did not receive an OK response from the GoToSocial server: got %d",
e.statusCode,
)
}
type Error struct {
message string
}
func (e Error) Error() string {
return e.message
}

View file

@ -3,15 +3,12 @@ package client
import ( import (
"bytes" "bytes"
"encoding/json" "encoding/json"
"errors"
"fmt" "fmt"
"net/http" "net/http"
"codeflow.dananglin.me.uk/apollo/enbas/internal" "codeflow.dananglin.me.uk/apollo/enbas/internal"
) )
var errEmptyAccessToken = errors.New("received an empty access token")
type tokenRequest struct { type tokenRequest struct {
RedirectURI string `json:"redirect_uri"` RedirectURI string `json:"redirect_uri"`
ClientID string `json:"client_id"` ClientID string `json:"client_id"`
@ -59,7 +56,7 @@ func (g *Client) UpdateToken(code string) error {
} }
if response.AccessToken == "" { if response.AccessToken == "" {
return errEmptyAccessToken return Error{"received an empty access token"}
} }
g.Authentication.AccessToken = response.AccessToken g.Authentication.AccessToken = response.AccessToken

View file

@ -1,7 +1,6 @@
package executor package executor
import ( import (
"errors"
"fmt" "fmt"
"codeflow.dananglin.me.uk/apollo/enbas/internal/client" "codeflow.dananglin.me.uk/apollo/enbas/internal/client"
@ -40,8 +39,8 @@ func (a *AddExecutor) addToList(gtsClient *client.Client) error {
doFunc, ok := funcMap[a.resourceType] doFunc, ok := funcMap[a.resourceType]
if !ok { if !ok {
return UnsupportedAddOperationError{ return UnsupportedAddOperationError{
ResourceType: a.resourceType, resourceType: a.resourceType,
AddToResourceType: a.toResourceType, addToResourceType: a.toResourceType,
} }
} }
@ -71,7 +70,7 @@ func (a *AddExecutor) addAccountsToList(gtsClient *client.Client) error {
} }
if !relationship.Following { if !relationship.Following {
return NotFollowingError{Account: accounts[ind].Acct} return NotFollowingError{account: accounts[ind].Acct}
} }
accountIDs[ind] = accounts[ind].ID accountIDs[ind] = accounts[ind].ID
@ -94,8 +93,8 @@ func (a *AddExecutor) addToAccount(gtsClient *client.Client) error {
doFunc, ok := funcMap[a.resourceType] doFunc, ok := funcMap[a.resourceType]
if !ok { if !ok {
return UnsupportedAddOperationError{ return UnsupportedAddOperationError{
ResourceType: a.resourceType, resourceType: a.resourceType,
AddToResourceType: a.toResourceType, addToResourceType: a.toResourceType,
} }
} }
@ -109,7 +108,7 @@ func (a *AddExecutor) addNoteToAccount(gtsClient *client.Client) error {
} }
if a.content == "" { if a.content == "" {
return errors.New("please add content to the status that you want to create") return Error{"please add content to the note you want to add"}
} }
if err := gtsClient.SetPrivateNote(accountID, a.content); err != nil { if err := gtsClient.SetPrivateNote(accountID, a.content); err != nil {
@ -129,8 +128,8 @@ func (a *AddExecutor) addToBookmarks(gtsClient *client.Client) error {
doFunc, ok := funcMap[a.resourceType] doFunc, ok := funcMap[a.resourceType]
if !ok { if !ok {
return UnsupportedAddOperationError{ return UnsupportedAddOperationError{
ResourceType: a.resourceType, resourceType: a.resourceType,
AddToResourceType: a.toResourceType, addToResourceType: a.toResourceType,
} }
} }
@ -166,8 +165,8 @@ func (a *AddExecutor) addToStatus(gtsClient *client.Client) error {
doFunc, ok := funcMap[a.resourceType] doFunc, ok := funcMap[a.resourceType]
if !ok { if !ok {
return UnsupportedAddOperationError{ return UnsupportedAddOperationError{
ResourceType: a.resourceType, resourceType: a.resourceType,
AddToResourceType: a.toResourceType, addToResourceType: a.toResourceType,
} }
} }
@ -196,7 +195,7 @@ func (a *AddExecutor) addBoostToStatus(gtsClient *client.Client) error {
func (a *AddExecutor) addVoteToStatus(gtsClient *client.Client) error { func (a *AddExecutor) addVoteToStatus(gtsClient *client.Client) error {
if a.votes.Empty() { if a.votes.Empty() {
return NoVotesError{} return Error{"please add your vote(s) to the poll"}
} }
status, err := gtsClient.GetStatus(a.statusID) status, err := gtsClient.GetStatus(a.statusID)
@ -205,15 +204,15 @@ func (a *AddExecutor) addVoteToStatus(gtsClient *client.Client) error {
} }
if status.Poll == nil { if status.Poll == nil {
return NoPollInStatusError{} return Error{"this status does not have a poll"}
} }
if status.Poll.Expired { if status.Poll.Expired {
return PollClosedError{} return Error{"this poll is closed"}
} }
if !status.Poll.Multiple && !a.votes.ExpectedLength(1) { if !status.Poll.Multiple && !a.votes.ExpectedLength(1) {
return MultipleChoiceError{} return Error{"this poll does not allow multiple choices"}
} }
myAccountID, err := getAccountID(gtsClient, true, nil) myAccountID, err := getAccountID(gtsClient, true, nil)
@ -222,7 +221,7 @@ func (a *AddExecutor) addVoteToStatus(gtsClient *client.Client) error {
} }
if status.Account.ID == myAccountID { if status.Account.ID == myAccountID {
return PollOwnerVoteError{} return Error{"you cannot vote in your own poll"}
} }
pollID := status.Poll.ID pollID := status.Poll.ID

View file

@ -1,7 +1,6 @@
package executor package executor
import ( import (
"errors"
"fmt" "fmt"
"codeflow.dananglin.me.uk/apollo/enbas/internal/client" "codeflow.dananglin.me.uk/apollo/enbas/internal/client"
@ -72,27 +71,35 @@ func (c *CreateExecutor) createStatus(gtsClient *client.Client) error {
if !c.mediaFiles.Empty() { if !c.mediaFiles.Empty() {
descriptionsExists := false descriptionsExists := false
focusValuesExists := false focusValuesExists := false
expectedLength := len(c.mediaFiles) numMediaFiles := len(c.mediaFiles)
mediaDescriptions := make([]string, expectedLength) mediaDescriptions := make([]string, numMediaFiles)
if !c.mediaDescriptions.Empty() { if !c.mediaDescriptions.Empty() {
descriptionsExists = true descriptionsExists = true
if !c.mediaDescriptions.ExpectedLength(expectedLength) { if !c.mediaDescriptions.ExpectedLength(numMediaFiles) {
return errors.New("the number of media descriptions does not match the number of media files") return MismatchedNumMediaValuesError{
valueType: "media descriptions",
numValues: len(c.mediaDescriptions),
numMediaFiles: numMediaFiles,
}
} }
} }
if !c.mediaFocusValues.Empty() { if !c.mediaFocusValues.Empty() {
focusValuesExists = true focusValuesExists = true
if !c.mediaFocusValues.ExpectedLength(expectedLength) { if !c.mediaFocusValues.ExpectedLength(numMediaFiles) {
return errors.New("the number of media focus values does not match the number of media files") return MismatchedNumMediaValuesError{
valueType: "media focus values",
numValues: len(c.mediaFocusValues),
numMediaFiles: numMediaFiles,
}
} }
} }
if descriptionsExists { if descriptionsExists {
for ind := 0; ind < expectedLength; ind++ { for ind := 0; ind < numMediaFiles; ind++ {
mediaDesc, err := utilities.ReadContents(c.mediaDescriptions[ind]) mediaDesc, err := utilities.ReadContents(c.mediaDescriptions[ind])
if err != nil { if err != nil {
return fmt.Errorf("unable to read the contents from %s: %w", c.mediaDescriptions[ind], err) return fmt.Errorf("unable to read the contents from %s: %w", c.mediaDescriptions[ind], err)
@ -102,7 +109,7 @@ func (c *CreateExecutor) createStatus(gtsClient *client.Client) error {
} }
} }
for ind := 0; ind < expectedLength; ind++ { for ind := 0; ind < numMediaFiles; ind++ {
var ( var (
mediaFile string mediaFile string
description string description string
@ -133,7 +140,7 @@ func (c *CreateExecutor) createStatus(gtsClient *client.Client) error {
} }
if c.content == "" && len(attachmentIDs) == 0 { if c.content == "" && len(attachmentIDs) == 0 {
return errors.New("please add content to the status that you want to create") return Error{"please add content to the status that you want to create"}
} }
content, err := utilities.ReadContents(c.content) content, err := utilities.ReadContents(c.content)
@ -144,7 +151,7 @@ func (c *CreateExecutor) createStatus(gtsClient *client.Client) error {
numAttachmentIDs := len(attachmentIDs) numAttachmentIDs := len(attachmentIDs)
if c.addPoll && numAttachmentIDs > 0 { if c.addPoll && numAttachmentIDs > 0 {
return fmt.Errorf("attaching media to a poll is not allowed") return Error{"attaching media to a poll is not allowed"}
} }
preferences, err := gtsClient.GetUserPreferences() preferences, err := gtsClient.GetUserPreferences()
@ -202,7 +209,7 @@ func (c *CreateExecutor) createStatus(gtsClient *client.Client) error {
if c.addPoll { if c.addPoll {
if len(c.pollOptions) == 0 { if len(c.pollOptions) == 0 {
return NoPollOptionError{} return Error{"no options were provided for this poll"}
} }
poll := client.CreateStatusPollForm{ poll := client.CreateStatusPollForm{
@ -227,28 +234,33 @@ func (c *CreateExecutor) createStatus(gtsClient *client.Client) error {
func (c *CreateExecutor) createMediaAttachment(gtsClient *client.Client) error { func (c *CreateExecutor) createMediaAttachment(gtsClient *client.Client) error {
expectedNumValues := 1 expectedNumValues := 1
if !c.mediaFiles.ExpectedLength(expectedNumValues) { if !c.mediaFiles.ExpectedLength(expectedNumValues) {
return fmt.Errorf( return UnexpectedNumValuesError{
"received an unexpected number of media files: want %d", name: "media files",
expectedNumValues, expected: expectedNumValues,
) actual: len(c.mediaFiles),
}
} }
description := "" description := ""
if !c.mediaDescriptions.Empty() { if !c.mediaDescriptions.Empty() {
if !c.mediaDescriptions.ExpectedLength(expectedNumValues) { if !c.mediaDescriptions.ExpectedLength(expectedNumValues) {
return fmt.Errorf( return UnexpectedNumValuesError{
"received an unexpected number of media descriptions: want %d", name: "media descriptions",
expectedNumValues, expected: expectedNumValues,
) actual: len(c.mediaDescriptions),
}
} }
var err error var err error
description, err = utilities.ReadContents(c.mediaDescriptions[0]) description, err = utilities.ReadContents(c.mediaDescriptions[0])
if err != nil { if err != nil {
return fmt.Errorf( return fmt.Errorf(
"unable to read the contents from %s: %w", "unable to read the contents from %s: %w",
c.mediaDescriptions[0], c.mediaDescriptions[0],
err,
) )
} }
} }
@ -256,11 +268,13 @@ func (c *CreateExecutor) createMediaAttachment(gtsClient *client.Client) error {
focus := "" focus := ""
if !c.mediaFocusValues.Empty() { if !c.mediaFocusValues.Empty() {
if !c.mediaFocusValues.ExpectedLength(expectedNumValues) { if !c.mediaFocusValues.ExpectedLength(expectedNumValues) {
return fmt.Errorf( return UnexpectedNumValuesError{
"received an unexpected number of media focus values: want %d", name: "media focus values",
expectedNumValues, expected: expectedNumValues,
) actual: len(c.mediaFocusValues),
}
} }
focus = c.mediaFocusValues[0] focus = c.mediaFocusValues[0]
} }

View file

@ -1,7 +1,6 @@
package executor package executor
import ( import (
"errors"
"fmt" "fmt"
"path/filepath" "path/filepath"
@ -62,7 +61,7 @@ func (d *DeleteExecutor) deleteStatus(gtsClient *client.Client) error {
} }
if status.Account.ID != myAccountID { if status.Account.ID != myAccountID {
return errors.New("unable to delete the status because the status does not belong to you") return Error{"unable to delete the status because the status does not belong to you"}
} }
text, err := gtsClient.DeleteStatus(d.statusID) text, err := gtsClient.DeleteStatus(d.statusID)

View file

@ -69,10 +69,11 @@ func (e *EditExecutor) editMediaAttachment(gtsClient *client.Client) error {
expectedNumValues := 1 expectedNumValues := 1
if !e.attachmentIDs.ExpectedLength(expectedNumValues) { if !e.attachmentIDs.ExpectedLength(expectedNumValues) {
return fmt.Errorf( return UnexpectedNumValuesError{
"received an unexpected number of media attachment IDs: want %d", name: "media attachment IDs",
expectedNumValues, expected: expectedNumValues,
) actual: len(e.attachmentIDs),
}
} }
attachment, err := gtsClient.GetMediaAttachment(e.attachmentIDs[0]) attachment, err := gtsClient.GetMediaAttachment(e.attachmentIDs[0])
@ -83,18 +84,21 @@ func (e *EditExecutor) editMediaAttachment(gtsClient *client.Client) error {
description := attachment.Description description := attachment.Description
if !e.mediaDescriptions.Empty() { if !e.mediaDescriptions.Empty() {
if !e.mediaDescriptions.ExpectedLength(expectedNumValues) { if !e.mediaDescriptions.ExpectedLength(expectedNumValues) {
return fmt.Errorf( return UnexpectedNumValuesError{
"received an unexpected number of media descriptions: want %d", name: "media description",
expectedNumValues, expected: expectedNumValues,
) actual: len(e.mediaDescriptions),
}
} }
var err error var err error
description, err = utilities.ReadContents(e.mediaDescriptions[0]) description, err = utilities.ReadContents(e.mediaDescriptions[0])
if err != nil { if err != nil {
return fmt.Errorf( return fmt.Errorf(
"unable to read the contents from %s: %w", "unable to read the contents from %s: %w",
e.mediaDescriptions[0], e.mediaDescriptions[0],
err,
) )
} }
} }
@ -102,11 +106,13 @@ func (e *EditExecutor) editMediaAttachment(gtsClient *client.Client) error {
focus := fmt.Sprintf("%f,%f", attachment.Meta.Focus.X, attachment.Meta.Focus.Y) focus := fmt.Sprintf("%f,%f", attachment.Meta.Focus.X, attachment.Meta.Focus.Y)
if !e.mediaFocusValues.Empty() { if !e.mediaFocusValues.Empty() {
if !e.mediaFocusValues.ExpectedLength(expectedNumValues) { if !e.mediaFocusValues.ExpectedLength(expectedNumValues) {
return fmt.Errorf( return UnexpectedNumValuesError{
"received an unexpected number of media focus values: want %d", name: "media focus values",
expectedNumValues, expected: expectedNumValues,
) actual: len(e.mediaFocusValues),
}
} }
focus = e.mediaFocusValues[0] focus = e.mediaFocusValues[0]
} }

View file

@ -1,5 +1,15 @@
package executor package executor
import "fmt"
type Error struct {
message string
}
func (e Error) Error() string {
return e.message
}
type FlagNotSetError struct { type FlagNotSetError struct {
flagText string flagText string
} }
@ -23,94 +33,87 @@ func (e NoAccountSpecifiedError) Error() string {
} }
type UnsupportedAddOperationError struct { type UnsupportedAddOperationError struct {
ResourceType string resourceType string
AddToResourceType string addToResourceType string
} }
func (e UnsupportedAddOperationError) Error() string { func (e UnsupportedAddOperationError) Error() string {
return "adding '" + return "adding '" +
e.ResourceType + e.resourceType +
"' to '" + "' to '" +
e.AddToResourceType + e.addToResourceType +
"' is not supported" "' is not supported"
} }
type UnsupportedRemoveOperationError struct { type UnsupportedRemoveOperationError struct {
ResourceType string resourceType string
RemoveFromResourceType string removeFromResourceType string
} }
func (e UnsupportedRemoveOperationError) Error() string { func (e UnsupportedRemoveOperationError) Error() string {
return "removing '" + return "removing '" +
e.ResourceType + e.resourceType +
"' from '" + "' from '" +
e.RemoveFromResourceType + e.removeFromResourceType +
"' is not supported" "' is not supported"
} }
type UnsupportedShowOperationError struct { type UnsupportedShowOperationError struct {
ResourceType string resourceType string
ShowFromResourceType string showFromResourceType string
} }
func (e UnsupportedShowOperationError) Error() string { func (e UnsupportedShowOperationError) Error() string {
return "showing '" + return "showing '" +
e.ResourceType + e.resourceType +
"' from '" + "' from '" +
e.ShowFromResourceType + e.showFromResourceType +
"' is not supported" "' is not supported"
} }
type UnknownCommandError struct { type UnknownCommandError struct {
Command string command string
} }
func (e UnknownCommandError) Error() string { func (e UnknownCommandError) Error() string {
return "unknown command '" + e.Command + "'" return "unknown command '" + e.command + "'"
}
type PollClosedError struct{}
func (e PollClosedError) Error() string {
return "this poll is closed"
}
type MultipleChoiceError struct{}
func (e MultipleChoiceError) Error() string {
return "this poll does not allow multiple choices"
}
type NoPollOptionError struct{}
func (e NoPollOptionError) Error() string {
return "no options were provided for this poll, please use the --" +
flagPollOption +
" flag to add options to the poll"
}
type NoVotesError struct{}
func (e NoVotesError) Error() string {
return "no votes were made, please add your vote(s) using the --vote flag"
}
type NoPollInStatusError struct{}
func (e NoPollInStatusError) Error() string {
return "this status does not have a poll"
}
type PollOwnerVoteError struct{}
func (e PollOwnerVoteError) Error() string {
return "you cannot vote in your own poll"
} }
type NotFollowingError struct { type NotFollowingError struct {
Account string account string
} }
func (e NotFollowingError) Error() string { func (e NotFollowingError) Error() string {
return "you are not following " + e.Account return "you are not following " + e.account
}
type MismatchedNumMediaValuesError struct {
valueType string
numValues int
numMediaFiles int
}
func (e MismatchedNumMediaValuesError) Error() string {
return fmt.Sprintf(
"unexpected number of %s: received %d media files but got %d %s",
e.valueType,
e.numMediaFiles,
e.numValues,
e.valueType,
)
}
type UnexpectedNumValuesError struct {
name string
actual int
expected int
}
func (e UnexpectedNumValuesError) Error() string {
return fmt.Sprintf(
"received an unexpected number of %s: received %d, expected %d",
e.name,
e.actual,
e.expected,
)
} }

View file

@ -145,7 +145,7 @@ func execute(
exe, ok := executorMap[command] exe, ok := executorMap[command]
if !ok { if !ok {
return UnknownCommandError{Command: command} return UnknownCommandError{command: command}
} }
if err := exe.Parse(args); err != nil { if err := exe.Parse(args); err != nil {

View file

@ -7,7 +7,6 @@ const (
flagInstance = "instance" flagInstance = "instance"
flagListID = "list-id" flagListID = "list-id"
flagListTitle = "list-title" flagListTitle = "list-title"
flagPollOption = "poll-option"
flagStatusID = "status-id" flagStatusID = "status-id"
flagTag = "tag" flagTag = "tag"
flagTo = "to" flagTo = "to"

View file

@ -1,7 +1,6 @@
package executor package executor
import ( import (
"errors"
"fmt" "fmt"
"codeflow.dananglin.me.uk/apollo/enbas/internal/client" "codeflow.dananglin.me.uk/apollo/enbas/internal/client"
@ -69,13 +68,14 @@ func (m *MuteExecutor) muteStatus(gtsClient *client.Client) error {
for _, mention := range status.Mentions { for _, mention := range status.Mentions {
if mention.ID == myAccountID { if mention.ID == myAccountID {
canMute = true canMute = true
break break
} }
} }
} }
if !canMute { if !canMute {
return errors.New("unable to mute the status because you are not the owner and you are not mentioned in it") return Error{"unable to mute the status because the status does not belong to you nor are you mentioned in it"}
} }
if err := gtsClient.MuteStatus(m.statusID); err != nil { if err := gtsClient.MuteStatus(m.statusID); err != nil {

View file

@ -39,8 +39,8 @@ func (r *RemoveExecutor) removeFromList(gtsClient *client.Client) error {
doFunc, ok := funcMap[r.resourceType] doFunc, ok := funcMap[r.resourceType]
if !ok { if !ok {
return UnsupportedRemoveOperationError{ return UnsupportedRemoveOperationError{
ResourceType: r.resourceType, resourceType: r.resourceType,
RemoveFromResourceType: r.fromResourceType, removeFromResourceType: r.fromResourceType,
} }
} }
@ -84,8 +84,8 @@ func (r *RemoveExecutor) removeFromAccount(gtsClient *client.Client) error {
doFunc, ok := funcMap[r.resourceType] doFunc, ok := funcMap[r.resourceType]
if !ok { if !ok {
return UnsupportedRemoveOperationError{ return UnsupportedRemoveOperationError{
ResourceType: r.resourceType, resourceType: r.resourceType,
RemoveFromResourceType: r.fromResourceType, removeFromResourceType: r.fromResourceType,
} }
} }
@ -115,8 +115,8 @@ func (r *RemoveExecutor) removeFromBookmarks(gtsClient *client.Client) error {
doFunc, ok := funcMap[r.resourceType] doFunc, ok := funcMap[r.resourceType]
if !ok { if !ok {
return UnsupportedRemoveOperationError{ return UnsupportedRemoveOperationError{
ResourceType: r.resourceType, resourceType: r.resourceType,
RemoveFromResourceType: r.fromResourceType, removeFromResourceType: r.fromResourceType,
} }
} }
@ -151,8 +151,8 @@ func (r *RemoveExecutor) removeFromStatus(gtsClient *client.Client) error {
doFunc, ok := funcMap[r.resourceType] doFunc, ok := funcMap[r.resourceType]
if !ok { if !ok {
return UnsupportedRemoveOperationError{ return UnsupportedRemoveOperationError{
ResourceType: r.resourceType, resourceType: r.resourceType,
RemoveFromResourceType: r.fromResourceType, removeFromResourceType: r.fromResourceType,
} }
} }

View file

@ -257,8 +257,8 @@ func (s *ShowExecutor) showFollowers(gtsClient *client.Client) error {
doFunc, ok := funcMap[s.fromResourceType] doFunc, ok := funcMap[s.fromResourceType]
if !ok { if !ok {
return UnsupportedShowOperationError{ return UnsupportedShowOperationError{
ResourceType: s.resourceType, resourceType: s.resourceType,
ShowFromResourceType: s.fromResourceType, showFromResourceType: s.fromResourceType,
} }
} }
@ -297,8 +297,8 @@ func (s *ShowExecutor) showFollowing(gtsClient *client.Client) error {
doFunc, ok := funcMap[s.fromResourceType] doFunc, ok := funcMap[s.fromResourceType]
if !ok { if !ok {
return UnsupportedShowOperationError{ return UnsupportedShowOperationError{
ResourceType: s.resourceType, resourceType: s.resourceType,
ShowFromResourceType: s.fromResourceType, showFromResourceType: s.fromResourceType,
} }
} }
@ -444,8 +444,8 @@ func (s *ShowExecutor) showMedia(gtsClient *client.Client) error {
doFunc, ok := funcMap[s.fromResourceType] doFunc, ok := funcMap[s.fromResourceType]
if !ok { if !ok {
return UnsupportedShowOperationError{ return UnsupportedShowOperationError{
ResourceType: s.resourceType, resourceType: s.resourceType,
ShowFromResourceType: s.fromResourceType, showFromResourceType: s.fromResourceType,
} }
} }

View file

@ -1,7 +1,6 @@
package executor package executor
import ( import (
"errors"
"fmt" "fmt"
"codeflow.dananglin.me.uk/apollo/enbas/internal/client" "codeflow.dananglin.me.uk/apollo/enbas/internal/client"
@ -64,13 +63,14 @@ func (m *UnmuteExecutor) unmuteStatus(gtsClient *client.Client) error {
for _, mention := range status.Mentions { for _, mention := range status.Mentions {
if mention.ID == myAccountID { if mention.ID == myAccountID {
canUnmute = true canUnmute = true
break break
} }
} }
} }
if !canUnmute { if !canUnmute {
return errors.New("unable to unmute the status because you are not the owner and you are not mentioned in it") return Error{"unable to unmute the status because the status does not belong to you nor are you mentioned in it"}
} }
if err := gtsClient.UnmuteStatus(m.statusID); err != nil { if err := gtsClient.UnmuteStatus(m.statusID); err != nil {

View file

@ -143,11 +143,11 @@ func (p Printer) fullDisplayNameFormat(displayName, acct string) string {
} }
func (p Printer) formatDate(date time.Time) string { func (p Printer) formatDate(date time.Time) string {
return date.Local().Format(dateFormat) return date.Local().Format(dateFormat) //nolint:gosmopolitan
} }
func (p Printer) formatDateTime(date time.Time) string { func (p Printer) formatDateTime(date time.Time) string {
return date.Local().Format(dateTimeFormat) return date.Local().Format(dateTimeFormat) //nolint:gosmopolitan
} }
func (p Printer) print(text string) { func (p Printer) print(text string) {

View file

@ -50,7 +50,7 @@ func OpenLink(browser, url string) error {
cmd := strings.Split(browser, " ") cmd := strings.Split(browser, " ")
cmd = append(cmd, url) cmd = append(cmd, url)
command := exec.Command(cmd[0], cmd[1:]...) command := exec.Command(cmd[0], cmd[1:]...) //nolint:gosec
if err := command.Start(); err != nil { if err := command.Start(); err != nil {
return fmt.Errorf("received an error after starting the program to view the link: %w", err) return fmt.Errorf("received an error after starting the program to view the link: %w", err)