diff options
| author | Xe Iaso <me@xeiaso.net> | 2024-05-24 15:03:04 -0400 |
|---|---|---|
| committer | Xe Iaso <me@xeiaso.net> | 2024-05-24 15:32:00 -0400 |
| commit | 042eb1851d06597ca91a83a9cf93d4135efe1096 (patch) | |
| tree | 366e741e74aa66fa47ac13410e94c8f172a039cc | |
| parent | 29d67647732f554e03a2a95164365a6ad8c825f7 (diff) | |
| download | x-042eb1851d06597ca91a83a9cf93d4135efe1096.tar.xz x-042eb1851d06597ca91a83a9cf93d4135efe1096.zip | |
cmd/x: add mi commands
Signed-off-by: Xe Iaso <me@xeiaso.net>
| -rw-r--r-- | cmd/x/main.go | 4 | ||||
| -rw-r--r-- | cmd/x/mi.go | 111 | ||||
| -rw-r--r-- | cmd/x/sanguisuga.go | 16 |
3 files changed, 125 insertions, 6 deletions
diff --git a/cmd/x/main.go b/cmd/x/main.go index d6bf012..3977a4d 100644 --- a/cmd/x/main.go +++ b/cmd/x/main.go @@ -13,6 +13,10 @@ func main() { subcommands.Register(subcommands.FlagsCommand(), "") subcommands.Register(subcommands.CommandsCommand(), "") + subcommands.Register(&miListSwitches{}, "mi") + subcommands.Register(&miSwitch{}, "mi") + subcommands.Register(&miWhoIsFront{}, "mi") + subcommands.Register(&sanguisugaAnimeList{}, "sanguisuga") subcommands.Register(&sanguisugaAnimeTrack{}, "sanguisuga") subcommands.Register(&sanguisugaTVList{}, "sanguisuga") diff --git a/cmd/x/mi.go b/cmd/x/mi.go new file mode 100644 index 0000000..08b5d8c --- /dev/null +++ b/cmd/x/mi.go @@ -0,0 +1,111 @@ +package main + +import ( + "context" + "flag" + "fmt" + "net/http" + + "github.com/google/subcommands" + "github.com/rodaine/table" + "google.golang.org/protobuf/types/known/emptypb" + "within.website/x/proto/mi" +) + +var ( + miURL = flag.String("mi-url", "http://mi.mi.svc.alrest.xeserv.us", "Base mi URL") +) + +type miWhoIsFront struct { + simple bool +} + +func (*miWhoIsFront) Name() string { return "who-is-front" } +func (*miWhoIsFront) Synopsis() string { return "Print who is front of the system." } +func (*miWhoIsFront) Usage() string { + return `who-is-front [--mi-url]: +Print who is front of the system. +` +} +func (wif *miWhoIsFront) SetFlags(f *flag.FlagSet) { + f.BoolVar(&wif.simple, "simple", false, "Print only the name of the front member.") +} +func (wif *miWhoIsFront) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { + cli := mi.NewSwitchTrackerProtobufClient(*miURL, http.DefaultClient) + + front, err := cli.WhoIsFront(ctx, &emptypb.Empty{}) + if err != nil { + fmt.Printf("error: %v\n", err) + return subcommands.ExitFailure + } + + if wif.simple { + fmt.Printf("%s\n", front.Member.Name) + return subcommands.ExitSuccess + } + + fmt.Printf("current front: %s\n", front.Member.Name) + + return subcommands.ExitSuccess +} + +type miSwitch struct { + member string +} + +func (*miSwitch) Name() string { return "switch" } +func (*miSwitch) Synopsis() string { return "Switch front to a different member." } +func (*miSwitch) Usage() string { + return `switch [--member]: +Switch front to a different member. +` +} +func (s *miSwitch) SetFlags(f *flag.FlagSet) { + f.StringVar(&s.member, "member", "", "Member to switch to.") +} +func (s *miSwitch) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { + cli := mi.NewSwitchTrackerProtobufClient(*miURL, http.DefaultClient) + + _, err := cli.Switch(ctx, &mi.SwitchReq{MemberName: s.member}) + if err != nil { + fmt.Printf("error: %v\n", err) + return subcommands.ExitFailure + } + + return subcommands.ExitSuccess +} + +type miListSwitches struct { + count int + page int +} + +func (*miListSwitches) Name() string { return "list-switches" } +func (*miListSwitches) Synopsis() string { return "List switches." } +func (*miListSwitches) Usage() string { + return `list-switches [--count] [--page]: +List a number of past switches. +` +} +func (ls *miListSwitches) SetFlags(f *flag.FlagSet) { + f.IntVar(&ls.count, "count", 10, "Number of switches to list.") + f.IntVar(&ls.page, "page", 0, "Page of switches to list.") +} +func (ls *miListSwitches) Execute(ctx context.Context, f *flag.FlagSet, _ ...interface{}) subcommands.ExitStatus { + cli := mi.NewSwitchTrackerProtobufClient(*miURL, http.DefaultClient) + + resp, err := cli.ListSwitches(ctx, &mi.ListSwitchesReq{Count: int32(ls.count), Page: int32(ls.page)}) + if err != nil { + fmt.Printf("error: %v\n", err) + return subcommands.ExitFailure + } + + tbl := table.New("Started at", "Ended at", "Member") + for _, sw := range resp.Switches { + tbl.AddRow(sw.GetSwitch().GetStartedAt(), sw.Switch.GetEndedAt(), sw.GetMember().GetName()) + } + + tbl.Print() + + return subcommands.ExitSuccess +} diff --git a/cmd/x/sanguisuga.go b/cmd/x/sanguisuga.go index ba2ecbe..c87b93a 100644 --- a/cmd/x/sanguisuga.go +++ b/cmd/x/sanguisuga.go @@ -15,7 +15,7 @@ import ( ) var ( - sanguisugaURL = flag.String("url", "http://sanguisuga", "Base sanguisuga URL") + sanguisugaURL = flag.String("sanguisuga-url", "http://sanguisuga", "Base sanguisuga URL") ) type Show struct { @@ -29,8 +29,9 @@ type sanguisugaAnimeList struct{} func (*sanguisugaAnimeList) Name() string { return "anime-list" } func (*sanguisugaAnimeList) Synopsis() string { return "Print list of anime tracked by sanguisuga." } func (*sanguisugaAnimeList) Usage() string { - return `anime-list [--url]: - Print list of anime tracked by sanguisuga.` + return `anime-list: +Print list of anime tracked by sanguisuga +` } func (sal *sanguisugaAnimeList) SetFlags(f *flag.FlagSet) {} @@ -67,7 +68,8 @@ func (*sanguisugaAnimeTrack) Synopsis() string { } func (*sanguisugaAnimeTrack) Usage() string { return `anime-track <title> <dataDir>: - Add a new anime to the tracklist for XDCC.` +Add a new anime to the tracklist for XDCC. +` } func (sal *sanguisugaAnimeTrack) SetFlags(f *flag.FlagSet) {} @@ -107,7 +109,8 @@ func (*sanguisugaTVList) Name() string { return "tv-list" } func (*sanguisugaTVList) Synopsis() string { return "Print list of tv tracked by sanguisuga." } func (*sanguisugaTVList) Usage() string { return `tv-list [--url]: - Print list of tv tracked by sanguisuga.` +Print list of tv tracked by sanguisuga. +` } func (sal *sanguisugaTVList) SetFlags(f *flag.FlagSet) {} @@ -144,7 +147,8 @@ func (*sanguisugaTVTrack) Synopsis() string { } func (*sanguisugaTVTrack) Usage() string { return `tv-track <title> <dataDir>: - Add a new tv to the tracklist for XDCC.` +Add a new tv to the tracklist. +` } func (sal *sanguisugaTVTrack) SetFlags(f *flag.FlagSet) {} |
