From f64f8a43a692027c48b407608f57466566b47aab Mon Sep 17 00:00:00 2001 From: Dan Anglin Date: Wed, 3 Jul 2024 14:20:25 +0100 Subject: [PATCH] fix: command line format for showing followers CHANGES: - When viewing followers and followings from an account, the from flag must now be set by the user. - enbas show --type followers --from account --my-account - enbas show --type following --from account --account-name john - New error type for unsupported show operations: Return an error if enbas detects an unsupported show operation (e.g. showing media from a list). --- internal/executor/errors.go | 13 +++++++++++ internal/executor/show.go | 45 ++++++++++++++++++++++++++++++++++++- 2 files changed, 57 insertions(+), 1 deletion(-) diff --git a/internal/executor/errors.go b/internal/executor/errors.go index 3094371..c16a2a8 100644 --- a/internal/executor/errors.go +++ b/internal/executor/errors.go @@ -52,6 +52,19 @@ func (e UnsupportedRemoveOperationError) Error() string { "' is not supported" } +type UnsupportedShowOperationError struct { + ResourceType string + ShowFromResourceType string +} + +func (e UnsupportedShowOperationError) Error() string { + return "showing '" + + e.ResourceType + + "' from '" + + e.ShowFromResourceType + + "' is not supported" +} + type EmptyContentError struct { ResourceType string Hint string diff --git a/internal/executor/show.go b/internal/executor/show.go index 2926c77..6d2cb3c 100644 --- a/internal/executor/show.go +++ b/internal/executor/show.go @@ -287,6 +287,26 @@ func (s *ShowExecutor) showLists(gtsClient *client.Client) error { } func (s *ShowExecutor) showFollowers(gtsClient *client.Client) error { + if s.fromResourceType == "" { + return FlagNotSetError{flagText: flagFrom} + } + + funcMap := map[string]func(*client.Client) error{ + resourceAccount: s.showFollowersFromAccount, + } + + doFunc, ok := funcMap[s.fromResourceType] + if !ok { + return UnsupportedShowOperationError{ + ResourceType: s.resourceType, + ShowFromResourceType: s.fromResourceType, + } + } + + return doFunc(gtsClient) +} + +func (s *ShowExecutor) showFollowersFromAccount(gtsClient *client.Client) error { accountID, err := getAccountID(gtsClient, s.myAccount, s.accountName, s.config.CredentialsFile) if err != nil { return fmt.Errorf("received an error while getting the account ID: %w", err) @@ -307,6 +327,26 @@ func (s *ShowExecutor) showFollowers(gtsClient *client.Client) error { } func (s *ShowExecutor) showFollowing(gtsClient *client.Client) error { + if s.fromResourceType == "" { + return FlagNotSetError{flagText: flagFrom} + } + + funcMap := map[string]func(*client.Client) error{ + resourceAccount: s.showFollowingFromAccount, + } + + doFunc, ok := funcMap[s.fromResourceType] + if !ok { + return UnsupportedShowOperationError{ + ResourceType: s.resourceType, + ShowFromResourceType: s.fromResourceType, + } + } + + return doFunc(gtsClient) +} + +func (s *ShowExecutor) showFollowingFromAccount(gtsClient *client.Client) error { accountID, err := getAccountID(gtsClient, s.myAccount, s.accountName, s.config.CredentialsFile) if err != nil { return fmt.Errorf("received an error while getting the account ID: %w", err) @@ -449,7 +489,10 @@ func (s *ShowExecutor) showMedia(gtsClient *client.Client) error { doFunc, ok := funcMap[s.fromResourceType] if !ok { - return fmt.Errorf("do not support viewing media from %s", s.fromResourceType) + return UnsupportedShowOperationError{ + ResourceType: s.resourceType, + ShowFromResourceType: s.fromResourceType, + } } return doFunc(gtsClient)