package executor import ( "fmt" "codeflow.dananglin.me.uk/apollo/enbas/internal/client" "codeflow.dananglin.me.uk/apollo/enbas/internal/model" ) func (e *EditExecutor) Execute() error { if e.resourceType == "" { return FlagNotSetError{flagText: flagType} } funcMap := map[string]func(*client.Client) error{ resourceList: e.editList, resourceMediaAttachment: e.editMediaAttachment, } doFunc, ok := funcMap[e.resourceType] if !ok { return UnsupportedTypeError{resourceType: e.resourceType} } gtsClient, err := client.NewClientFromFile(e.config.CredentialsFile) if err != nil { return fmt.Errorf("unable to create the GoToSocial client: %w", err) } return doFunc(gtsClient) } func (e *EditExecutor) editList(gtsClient *client.Client) error { if e.listID == "" { return FlagNotSetError{flagText: flagListID} } list, err := gtsClient.GetList(e.listID) if err != nil { return fmt.Errorf("unable to get the list: %w", err) } if e.listTitle != "" { list.Title = e.listTitle } if e.listRepliesPolicy != "" { parsedListRepliesPolicy, err := model.ParseListRepliesPolicy(e.listRepliesPolicy) if err != nil { return err } list.RepliesPolicy = parsedListRepliesPolicy } updatedList, err := gtsClient.UpdateList(list) if err != nil { return fmt.Errorf("unable to update the list: %w", err) } e.printer.PrintSuccess("Successfully edited the list.") e.printer.PrintList(updatedList) return nil } func (e *EditExecutor) editMediaAttachment(gtsClient *client.Client) error { expectedNumMediaAttachmentIDs := 1 if !e.attachmentIDs.ExpectedLength(expectedNumMediaAttachmentIDs) { return fmt.Errorf( "received an unexpected number of media attachment IDs: want %d", expectedNumMediaAttachmentIDs, ) } attachment, err := gtsClient.GetMediaAttachment(e.attachmentIDs[0]) if err != nil { return fmt.Errorf("unable to get the media attachment: %w", err) } description := e.description if description == "" { description = attachment.Description } focus := e.focus if focus == "" { focus = fmt.Sprintf("%f,%f", attachment.Meta.Focus.X, attachment.Meta.Focus.Y) } if _, err = gtsClient.UpdateMediaAttachment(e.attachmentIDs[0], description, focus); err != nil { return fmt.Errorf("unable to update the media attachment: %w", err) } e.printer.PrintSuccess("Successfully edited the media attachment.") return nil }