cmd/toot.go
author rjp <zimpenfish@gmail.com>
Mon, 23 Jan 2023 16:39:02 +0000
changeset 267 5b91a65ba95a
parent 239 605a00e9d1ab
child 268 4dd196a4ee7c
permissions -rw-r--r--
Update to handle non-int64 IDs Pleroma/Akkoma and GotoSocial use opaque IDs rather than `int64`s like Mastodon which means that `madon` can't talk to either of those. This commit updates everything that can be an ID to `madon.ActivityID` which is an alias for `string` - can't create a specific type for it since there's more than a few places where they're concatenated directly to strings for URLs, etc. Which means it could just as easily be a direct `string` type itself but I find that having distinct types can often make the code more readable and understandable. One extra bit is that `statusOpts` has grown a `_hasReplyTo` boolean to indicate whether the `--in-reply-to` flag was given or not because we can't distinguish because "empty because default" or "empty because given and empty". Another way around this would be to set the default to some theoretically impossible or unlikely string but you never know when someone might spin up an instance where, e.g., admin posts have negative integer IDs.
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
185
564d92b54b00 Update copyrights
Mikael Berthe <mikael@lilotux.net>
parents: 176
diff changeset
     1
// Copyright © 2017-2018 Mikael Berthe <mikael@lilotux.net>
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     2
//
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     3
// Licensed under the MIT license.
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     4
// Please see the LICENSE file is this directory.
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     5
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     6
package cmd
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     7
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
     8
import (
129
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
     9
	"strings"
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
    10
45
b58a7ea1aeb2 Use github.com/pkg/errors
Mikael Berthe <mikael@lilotux.net>
parents: 44
diff changeset
    11
	"github.com/pkg/errors"
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    12
	"github.com/spf13/cobra"
176
7efbbed5cf3c Fix duplicate usage of updateFlags variable name
Mikael Berthe <mikael@lilotux.net>
parents: 168
diff changeset
    13
	flag "github.com/spf13/pflag"
79
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    14
	"github.com/spf13/viper"
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    15
239
605a00e9d1ab Switch to Go modules (and bump Go version requirement)
Mikael Berthe <mikael@lilotux.net>
parents: 221
diff changeset
    16
	"github.com/McKael/madon/v2"
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    17
)
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    18
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    19
// toot is a kind of alias for status post
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    20
176
7efbbed5cf3c Fix duplicate usage of updateFlags variable name
Mikael Berthe <mikael@lilotux.net>
parents: 168
diff changeset
    21
var tootAliasFlags *flag.FlagSet
7efbbed5cf3c Fix duplicate usage of updateFlags variable name
Mikael Berthe <mikael@lilotux.net>
parents: 168
diff changeset
    22
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    23
func init() {
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    24
	RootCmd.AddCommand(tootAliasCmd)
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    25
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    26
	tootAliasCmd.Flags().BoolVar(&statusOpts.sensitive, "sensitive", false, "Mark post as sensitive (NSFW)")
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    27
	tootAliasCmd.Flags().StringVar(&statusOpts.visibility, "visibility", "", "Visibility (direct|private|unlisted|public)")
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    28
	tootAliasCmd.Flags().StringVar(&statusOpts.spoiler, "spoiler", "", "Spoiler warning (CW)")
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    29
	tootAliasCmd.Flags().StringVar(&statusOpts.mediaIDs, "media-ids", "", "Comma-separated list of media IDs")
15
8ac069eaa817 Add option --text-file to send content from a file
Mikael Berthe <mikael@lilotux.net>
parents: 0
diff changeset
    30
	tootAliasCmd.Flags().StringVarP(&statusOpts.mediaFilePath, "file", "f", "", "Media attachment file name")
8ac069eaa817 Add option --text-file to send content from a file
Mikael Berthe <mikael@lilotux.net>
parents: 0
diff changeset
    31
	tootAliasCmd.Flags().StringVar(&statusOpts.textFilePath, "text-file", "", "Text file name (message content)")
267
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    32
	tootAliasCmd.Flags().StringVarP(&statusOpts.inReplyToID, "in-reply-to", "r", "", "Status ID to reply to")
71
67e3234c26a9 Add --stdin to send a message from standard input
Mikael Berthe <mikael@lilotux.net>
parents: 70
diff changeset
    33
	tootAliasCmd.Flags().BoolVar(&statusOpts.stdin, "stdin", false, "Read message content from standard input")
129
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
    34
	tootAliasCmd.Flags().BoolVar(&statusOpts.addMentions, "add-mentions", false, "Add mentions when replying")
168
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
    35
	tootAliasCmd.Flags().BoolVar(&statusOpts.sameVisibility, "same-visibility", false, "Use same visibility as original message (for replies)")
35
61ed03c3f134 Add flag shell completion (values for --output and --visibility)
Mikael Berthe <mikael@lilotux.net>
parents: 17
diff changeset
    36
61ed03c3f134 Add flag shell completion (values for --output and --visibility)
Mikael Berthe <mikael@lilotux.net>
parents: 17
diff changeset
    37
	// Flag completion
61ed03c3f134 Add flag shell completion (values for --output and --visibility)
Mikael Berthe <mikael@lilotux.net>
parents: 17
diff changeset
    38
	annotation := make(map[string][]string)
61ed03c3f134 Add flag shell completion (values for --output and --visibility)
Mikael Berthe <mikael@lilotux.net>
parents: 17
diff changeset
    39
	annotation[cobra.BashCompCustom] = []string{"__madonctl_visibility"}
61ed03c3f134 Add flag shell completion (values for --output and --visibility)
Mikael Berthe <mikael@lilotux.net>
parents: 17
diff changeset
    40
61ed03c3f134 Add flag shell completion (values for --output and --visibility)
Mikael Berthe <mikael@lilotux.net>
parents: 17
diff changeset
    41
	tootAliasCmd.Flags().Lookup("visibility").Annotations = annotation
168
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
    42
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
    43
	// This one will be used to check if the options were explicitly set or not
176
7efbbed5cf3c Fix duplicate usage of updateFlags variable name
Mikael Berthe <mikael@lilotux.net>
parents: 168
diff changeset
    44
	tootAliasFlags = tootAliasCmd.Flags()
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    45
}
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    46
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    47
var tootAliasCmd = &cobra.Command{
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    48
	Use:     "toot",
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    49
	Aliases: []string{"post", "pouet"},
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    50
	Short:   "Post a message (toot)",
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    51
	Example: `  madonctl toot message
221
970c319e1f7c Update toot online examples
Mikael Berthe <mikael@lilotux.net>
parents: 220
diff changeset
    52
  madonctl toot --visibility private "To my followers only"
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    53
  madonctl toot --spoiler Warning "Hello, World"
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    54
  madonctl status post --media-ids ID1,ID2 "Here are the photos"
15
8ac069eaa817 Add option --text-file to send content from a file
Mikael Berthe <mikael@lilotux.net>
parents: 0
diff changeset
    55
  madonctl post --sensitive --file image.jpg Image
71
67e3234c26a9 Add --stdin to send a message from standard input
Mikael Berthe <mikael@lilotux.net>
parents: 70
diff changeset
    56
  madonctl toot --text-file message.txt
129
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
    57
  madonctl toot --in-reply-to STATUSID "@user response"
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
    58
  madonctl toot --in-reply-to STATUSID --add-mentions "response"
79
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    59
  echo "Hello from #madonctl" | madonctl toot --visibility unlisted --stdin
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    60
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    61
The default visibility can be set in the configuration file with the option
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    62
'default_visibility' (or with an environmnent variable).`,
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    63
	RunE: func(cmd *cobra.Command, args []string) error {
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    64
		if err := madonInit(true); err != nil {
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    65
			return err
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    66
		}
267
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    67
		// Update the extra flag to reflect if `in-reply-to` was present or not
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    68
		statusOpts._hasReplyTo = cmd.Flags().Lookup("in-reply-to").Changed
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    69
		return statusSubcommandRunE("post", args)
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    70
	},
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    71
}
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    72
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    73
func toot(tootText string) (*madon.Status, error) {
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    74
	opt := statusOpts
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    75
79
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    76
	// Get default visibility from configuration
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    77
	if opt.visibility == "" {
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    78
		if v := viper.GetString("default_visibility"); v != "" {
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    79
			opt.visibility = v
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    80
		}
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    81
	}
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    82
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    83
	switch opt.visibility {
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    84
	case "", "direct", "private", "unlisted", "public":
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    85
		// OK
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    86
	default:
79
bca27c55be9f Add default visibility setting
Mikael Berthe <mikael@lilotux.net>
parents: 71
diff changeset
    87
		return nil, errors.Errorf("invalid visibility argument value '%s'", opt.visibility)
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    88
	}
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    89
267
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    90
	// Bit of a fudge but there's no easy way to tell if a string flag
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    91
	// is empty by default or empty by assignment.  Can't use a pointer
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    92
	// and have `nil` be "unset" because Cobra will crash if we send it
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    93
	// a `nil` as the recepient for a flag variable.  Hence using an
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    94
	// extra struct member as a flag to indicate set/unset.
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
    95
	if opt._hasReplyTo && opt.inReplyToID == "" {
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    96
		return nil, errors.New("invalid in-reply-to argument value")
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    97
	}
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    98
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
    99
	ids, err := splitIDs(opt.mediaIDs)
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   100
	if err != nil {
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   101
		return nil, errors.New("cannot parse media IDs")
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   102
	}
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   103
129
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   104
	if tootText == "" && len(ids) == 0 && opt.spoiler == "" && opt.mediaFilePath == "" {
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   105
		return nil, errors.New("toot is empty")
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   106
	}
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   107
267
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
   108
	if opt.inReplyToID != "" {
168
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   109
		var initialStatus *madon.Status
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   110
		var preserveVis bool
176
7efbbed5cf3c Fix duplicate usage of updateFlags variable name
Mikael Berthe <mikael@lilotux.net>
parents: 168
diff changeset
   111
		if opt.sameVisibility &&
7efbbed5cf3c Fix duplicate usage of updateFlags variable name
Mikael Berthe <mikael@lilotux.net>
parents: 168
diff changeset
   112
			!tootAliasFlags.Lookup("visibility").Changed &&
7efbbed5cf3c Fix duplicate usage of updateFlags variable name
Mikael Berthe <mikael@lilotux.net>
parents: 168
diff changeset
   113
			!statusPostFlags.Lookup("visibility").Changed {
168
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   114
			// Preserve visibility unless the --visibility flag
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   115
			// has been used in the command line.
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   116
			preserveVis = true
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   117
		}
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   118
		if preserveVis || opt.addMentions {
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   119
			// Fetch original status message
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   120
			initialStatus, err = gClient.GetStatus(opt.inReplyToID)
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   121
			if err != nil {
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   122
				return nil, errors.Wrap(err, "cannot get original message")
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   123
			}
129
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   124
		}
168
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   125
		if preserveVis {
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   126
			v := initialStatus.Visibility
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   127
			// We do not set public visibility unless explicitly requested
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   128
			if v == "public" {
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   129
				opt.visibility = "unlisted"
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   130
			} else {
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   131
				opt.visibility = v
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   132
			}
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   133
		}
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   134
		if opt.addMentions {
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   135
			mentions, err := mentionsList(initialStatus)
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   136
			if err != nil {
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   137
				return nil, err
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   138
			}
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   139
			tootText = mentions + tootText
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   140
		}
129
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   141
	}
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   142
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   143
	// Uploading media file last
15
8ac069eaa817 Add option --text-file to send content from a file
Mikael Berthe <mikael@lilotux.net>
parents: 0
diff changeset
   144
	if opt.mediaFilePath != "" {
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   145
		if len(ids) > 3 {
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   146
			return nil, errors.New("too many media attachments")
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   147
		}
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   148
15
8ac069eaa817 Add option --text-file to send content from a file
Mikael Berthe <mikael@lilotux.net>
parents: 0
diff changeset
   149
		fileMediaID, err := uploadFile(opt.mediaFilePath)
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   150
		if err != nil {
45
b58a7ea1aeb2 Use github.com/pkg/errors
Mikael Berthe <mikael@lilotux.net>
parents: 44
diff changeset
   151
			return nil, errors.Wrap(err, "cannot attach media file")
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   152
		}
267
5b91a65ba95a Update to handle non-int64 IDs
rjp <zimpenfish@gmail.com>
parents: 239
diff changeset
   153
		if fileMediaID != "" {
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   154
			ids = append(ids, fileMediaID)
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   155
		}
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   156
	}
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   157
220
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   158
	postParam := madon.PostStatusParams{
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   159
		Text:        tootText,
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   160
		InReplyTo:   opt.inReplyToID,
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   161
		MediaIDs:    ids,
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   162
		Sensitive:   opt.sensitive,
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   163
		SpoilerText: opt.spoiler,
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   164
		Visibility:  opt.visibility,
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   165
	}
08a2ee738117 Update calls to madon's PostStatus & UpdateAccount
Mikael Berthe <mikael@lilotux.net>
parents: 185
diff changeset
   166
	return gClient.PostStatus(postParam)
129
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   167
}
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   168
168
ce4000ac7294 Add flag to reply with same visibility as original message
Mikael Berthe <mikael@lilotux.net>
parents: 129
diff changeset
   169
func mentionsList(s *madon.Status) (string, error) {
129
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   170
	a, err := gClient.GetCurrentAccount()
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   171
	if err != nil {
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   172
		return "", errors.Wrap(err, "cannot check account details")
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   173
	}
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   174
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   175
	var mentions []string
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   176
	// Add the sender if she is not the connected user
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   177
	if s.Account.Acct != a.Acct {
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   178
		mentions = append(mentions, "@"+s.Account.Acct)
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   179
	}
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   180
	for _, m := range s.Mentions {
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   181
		if m.Acct != a.Acct {
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   182
			mentions = append(mentions, "@"+m.Acct)
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   183
		}
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   184
	}
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   185
	mentionsStr := strings.Join(mentions, " ")
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   186
	if len(mentionsStr) > 0 {
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   187
		return mentionsStr + " ", nil
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   188
	}
11966471aac3 toot: Add flag --add-mentions to add mentions when replying
Mikael Berthe <mikael@lilotux.net>
parents: 79
diff changeset
   189
	return "", nil
0
5abace724584 Initial public release
Mikael Berthe <mikael@lilotux.net>
parents:
diff changeset
   190
}