1package client 2 3import ( 4 "context" 5 "fmt" 6 7 "github.com/keybase/cli" 8 "github.com/keybase/client/go/libcmdline" 9 "github.com/keybase/client/go/libkb" 10 "github.com/keybase/client/go/protocol/chat1" 11 "github.com/keybase/client/go/protocol/keybase1" 12) 13 14type CmdChatMute struct { 15 libkb.Contextified 16 resolvingRequest chatConversationResolvingRequest 17 status chat1.ConversationStatus 18} 19 20func newCmdChatMute(cl *libcmdline.CommandLine, g *libkb.GlobalContext) cli.Command { 21 return cli.Command{ 22 Name: "mute", 23 Usage: "Mute or unmute a conversation.", 24 ArgumentHelp: "[<conversation>]", 25 Action: func(c *cli.Context) { 26 cmd := &CmdChatMute{Contextified: libkb.NewContextified(g)} 27 cl.ChooseCommand(cmd, "mute", c) 28 cl.SetLogForward(libcmdline.LogForwardNone) 29 }, 30 Flags: append(getConversationResolverFlags(), mustGetChatFlags("unmute")...), 31 } 32} 33 34func (c *CmdChatMute) ParseArgv(ctx *cli.Context) error { 35 var err error 36 37 if len(ctx.Args()) > 1 { 38 return fmt.Errorf("too many arguments") 39 } 40 41 tlfName := "" 42 if len(ctx.Args()) == 1 { 43 tlfName = ctx.Args()[0] 44 } 45 46 c.resolvingRequest, err = parseConversationResolvingRequest(ctx, tlfName) 47 if err != nil { 48 return err 49 } 50 51 unmute := ctx.Bool("unmute") 52 53 c.status = chat1.ConversationStatus_MUTED 54 if unmute { 55 c.status = chat1.ConversationStatus_UNFILED 56 } 57 58 return nil 59} 60 61func (c *CmdChatMute) Run() error { 62 ctx := context.TODO() 63 64 resolver, err := newChatConversationResolver(c.G()) 65 if err != nil { 66 return err 67 } 68 69 if c.resolvingRequest.TlfName != "" { 70 if err = annotateResolvingRequest(c.G(), &c.resolvingRequest); err != nil { 71 return err 72 } 73 } 74 75 conversation, _, err := resolver.Resolve(ctx, c.resolvingRequest, chatConversationResolvingBehavior{ 76 CreateIfNotExists: false, 77 MustNotExist: false, 78 Interactive: false, 79 IdentifyBehavior: keybase1.TLFIdentifyBehavior_CHAT_CLI, 80 }) 81 if err != nil { 82 return err 83 } 84 85 setStatusArg := chat1.SetConversationStatusLocalArg{ 86 ConversationID: conversation.Info.Id, 87 Status: c.status, 88 } 89 90 _, err = resolver.ChatClient.SetConversationStatusLocal(ctx, setStatusArg) 91 if err != nil { 92 return err 93 } 94 return nil 95} 96 97func (c *CmdChatMute) GetUsage() libkb.Usage { 98 return libkb.Usage{ 99 API: true, 100 KbKeyring: true, 101 Config: true, 102 } 103} 104